﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using ADC.BL;
using ADC.Utilites;

namespace ADC.Web.Admin
{
    public partial class ManageUser : System.Web.UI.Page
    {
        log4net.ILog logger = log4net.LogManager.GetLogger("ManageUser");
        private int _userID;
        private int _mode;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                InitData();
            }


            var mode = Request.Params["mode"];
            if (Convert.ToInt32(mode).Equals(1))
            { // Edit Mode
                txtUserName.Enabled = false;
            }

        }

        private int validateInput()
        {
            int result = 1;
            lblErrorMessage.Text = "";
            if (txtUserName.Text.Trim() == "")
            {

                lblErrorMessage.Text = "<br>Tên đăng nhập không được trống";
                result = -1;
            }


            if (txtName.Text.Trim() == "")
            {

                lblErrorMessage.Text += "<br>Tên không được trống";
                result = -1;
            }


            if (txtPassword.Text.Trim() == "")
            {

                lblErrorMessage.Text += "<br>Mật khẩu không được trống";
                result = -1;
            }


            if ((txtPassword.Text != "") && (txtRetypePassword.Text != txtPassword.Text))
            {

                lblErrorMessage.Text += "<br>Mật khẩu không giống, không hợp lệ";
                result = -1;
            }



            if (result == -1)
            {
                lblErrorMessage.Visible = true;
            }

            return result;
        }

        protected void btnUpdate_Click(object sender, EventArgs e)
        {
            if (validateInput() == -1)
            {
                return;
            }
            try
            {
                var mode = Request.Params["mode"];
                if (Convert.ToInt32(mode).Equals(1))
                { // Edit Mode
                    _userID = Convert.ToInt32(Request.Params["ID"]);

                    var user = new DAL.User();

                    user.UserID = _userID;
                    user.UserName = txtUserName.Text;
                    user.Name = txtName.Text;
                    user.Email = txtEmail.Text;
                    user.ModifiedDate = DateTime.Now;

                    user.Password = Common.EncodePassword(txtPassword.Text);
                    if (UserFactory.Update(user, Convert.ToInt32(DropDownListUserType.SelectedValue)) > 0)
                    {
                        lblErrorMessage.Visible = true;
                        lblErrorMessage.Text = Common.UPDATE_SUCESSFULLY;
                    }
                    else
                    {
                        lblErrorMessage.Visible = true;
                        lblErrorMessage.Text = Common.UPDATE_FAIL;
                    }
                }
                else if (Convert.ToInt32(mode).Equals(0))
                {
                    //check userName is exist
                    if (UserFactory.GetUserByName(txtUserName.Text.Trim()) != null)
                    {
                        lblErrorMessage.Text = "Tên truy cập đã tồn tại, mời bạn chọn tên truy cập khác";
                        lblErrorMessage.Visible = true;
                        return;
                    }

                    var user = new DAL.User();
                    user.UserName = txtUserName.Text;
                    user.Password = Common.EncodePassword(txtPassword.Text);
                    user.Name = txtName.Text;
                    user.Email = txtEmail.Text;
                    user.ModifiedDate = DateTime.Now;
                    user.CreatedDate = DateTime.Now;
                    if (UserFactory.Insert(user, Convert.ToInt32(DropDownListUserType.SelectedValue)) > 0)
                    {
                        lblErrorMessage.Visible = true;
                        lblErrorMessage.Text = Common.INSERT_SUCESSFULLY;
                    }
                    else
                    {
                        lblErrorMessage.Visible = true;
                        lblErrorMessage.Text = Common.INSERT_FAIL;
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex.ToString());
                if (GlobalInfo.IsEnableDebugMode) throw;
            }
        }

        private void InitData()
        {
            // Bind to User Type
            var role = UserFactory.GetlAllRole();
            DropDownListUserType.DataSource = role;
            DropDownListUserType.DataTextField = "Name";
            DropDownListUserType.DataValueField = "RoleID";
            DropDownListUserType.DataBind();

            if (Request.Params["mode"] != null)
            {
                try
                {
                    _mode = Convert.ToInt32(Request.Params["mode"].ToString());

                    if (_mode.Equals(1)) // Edit Mode
                    {
                        if ((Request.Params["ID"] == null)) return;
                        _userID = Convert.ToInt32(Request.Params["ID"].ToString());
                        LinkButtonAddNew.Text = "Cập nhật";
                        lblHeader.Text = "Cập nhật người dùng";

                        // Get from database
                        var user = UserFactory.GetByID(Convert.ToInt32(_userID));

                        if (user != null)
                        {
                            txtUserName.Text = user.UserName;
                            txtName.Text = user.Name;
                            txtEmail.Text = user.Email;
                            txtPassword.Text = user.Password;
                            txtRetypePassword.Text = user.Password;
                            if (user.Role != null)
                            {
                                DropDownListUserType.SelectedValue = ((System.Data.Objects.DataClasses.EntityReference)(user.RoleReference)).EntityKey.EntityKeyValues[0].Value.ToString();
                            }
                        }
                    }
                    else if (_mode.Equals(0)) // Add mode
                    { // New Mode
                        LinkButtonAddNew.Text = "Thêm";
                        lblHeader.Text = "Thêm mới người dùng";
                    }
                }
                catch (Exception ex)
                {
                    _userID = 0;
                    _mode = 0;
                    logger.Error(ex.ToString());
                    if (GlobalInfo.IsEnableDebugMode) throw;
                }
            }
        }

    }
}